/*
		memmove函数的模拟实现

		夏思成

		2024年4月2日

		西科大15号公寓楼
*/

#include <stdio.h>
#include <assert.h>

void* my_memmove(void* destination, const void* source, size_t num)
{
	assert(destination && source);

	void* ret = destination;

	//后->前
	if (destination > source)
	{
		while (num--)
		{
			*((char*)destination + num) = *((char*)source + num);
		}
	}
	//前->后
	else
	{
		while (num--)
		{
			*((char*)destination) = *((char*)source);
			destination = (char*)destination + 1;
			source = (char*)source + 1;
		}
	}

	return ret;
}

int main()
{
	char arr1[20] = "abcdef";

	char* ret = (char*)my_memmove(arr1+2, arr1, sizeof(char) * 3);

	printf("%s\n", ret);
	return 0;
}